package com.spark.mooc.ch2_scala.part02_objectOrientedProgramming

/**
 * @description:
 * @time: 2020/11/24 13:52
 * @author: lhy
 */
class Person(val name:String) {
    private val id = Person.newPerson()  //调用了伴生对象中的方法
    def info(): Unit ={
        printf("The id of %s is %d.\n",name,id)
        println(Person.lastId)
    }
}

/**
 * 当单例对象与某个类具有相同的名称时，它被称为这个类的伴生对象
 * 伴生对象的方法只能通过伴生对象调用，不能通过伴生类的实例直接调用
 */
object Person{
    private var lastId = 0
    def newPerson()={
        lastId += 1
        lastId
    }
    def main(args: Array[String]): Unit ={
        val person1 = new Person("LiLei")
        person1.info()
        val person2 = new Person("HanMei")
        person2.info()
        println("*******************")
        println(person1.id)
        println(person2.id)
    }
}
